home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 4810 / 4810.xpi / chrome / speeddial.jar / content / settings / prefs.js < prev    next >
Text File  |  2010-01-31  |  17KB  |  439 lines

  1. var speeddial_gPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.speeddial.");
  2.  
  3. function speeddial_initPrefs() {
  4.   if(document.documentElement.getButton && document.documentElement.getButton('extra2')) {
  5.     var extra2 = document.documentElement.getButton('extra2');
  6.     extra2.setAttribute('type', 'menu');
  7.     extra2.setAttribute('popup', 'speeddial-settings-popup');
  8.   }
  9. }
  10.  
  11. function speeddial_defaultSettings() {
  12.   var strings = document.getElementById("prefsStrings");
  13.   if (!confirm(strings.getString('prefs.confirm'))) return false;
  14.  
  15.   var count = { value : 0 };
  16.   var childList = speeddial_gPrefBranch.getChildList("", count);
  17.  
  18.   for (var i = 0; i < count.value; i++) {
  19.     if(speeddial_gPrefBranch.prefHasUserValue(childList[i]) && childList[i] != "changelog") {
  20.       speeddial_gPrefBranch.clearUserPref(childList[i]);
  21.     }
  22.   }
  23.  
  24.   window.alert(strings.getString('prefs.defaultsuccess'));
  25.   return true;
  26. }
  27.  
  28. function speeddial_importSettings() {
  29.   var targetFile = speeddial_loadFromFile();
  30.   if(!targetFile) return false;
  31.   
  32.   return importFile(targetFile);
  33. }
  34.  
  35. function importFile(targetFile) {
  36.   var i;
  37.   var cont;
  38.   var speeddialImport = new Array();
  39.   var appendFilters = null;
  40.   var pattern = new Array();
  41.   var charset = "UTF-8";
  42.   var is = Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream);
  43.   var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  44.   var strings = document.getElementById("prefsStrings");
  45.   var totalImports = 0;
  46.  
  47.   stream.init(targetFile, 0x01, 0444, null);
  48.   is.init(stream, charset, 1024, 0xFFFD);
  49.   
  50.   if (is instanceof Components.interfaces.nsIUnicharLineInputStream) {
  51.     var line = {};
  52.     do {
  53.       cont = is.readLine(line);
  54.       pattern[pattern.length] = line.value;
  55.     } while (cont);
  56.   }
  57.   
  58.   is.close();
  59.   stream.close();
  60.   
  61.   if ((pattern[1].indexOf("Speed Dial - Settings") < 0) && (pattern[1].indexOf("Speed Dial - Dials") < 0)) {
  62.     alert(strings.getString('prefs.invalid'));
  63.     return false;
  64.   }
  65.   
  66.   if (!confirm(strings.getString('prefs.import'))) return false;
  67.  
  68.   for (i = 6; i < pattern.length; i++) {
  69.     var index = pattern[i].indexOf("=");
  70.  
  71.     if (index > 0) {
  72.       speeddialImport[totalImports] = [];
  73.       speeddialImport[totalImports].push(pattern[i].substring(0, index));
  74.       speeddialImport[totalImports].push(pattern[i].substring(index + 1, pattern[i].length));
  75.       totalImports++;
  76.     }
  77.   }
  78.   
  79.   var processedThumbnails = new Array();
  80.  
  81.   for(i = 0; i < totalImports; i++) {
  82.     try {
  83.       var addCharAsComplex = false;
  84.       var prefIsEncoded = false;
  85.       var prefType;
  86.       
  87.       if (speeddialImport[i][0].indexOf("thumbnail-") == 0) {
  88.         // Determine preference type
  89.         if ((speeddialImport[i][0].indexOf("-label") > -1)||(speeddialImport[i][0].indexOf("-title") > -1)) {
  90.           addCharAsComplex = true;
  91.           prefType = Components.interfaces.nsIPrefBranch.PREF_STRING;
  92.         } else if (speeddialImport[i][0].indexOf("-refreshinterval") > -1) {
  93.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  94.         } else if (speeddialImport[i][0].indexOf("-layout") > -1) {
  95.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  96.         } else if (speeddialImport[i][0].indexOf("-dynamictitle") > -1) {
  97.           prefType = Components.interfaces.nsIPrefBranch.PREF_BOOL;
  98.         } else if (speeddialImport[i][0].indexOf("-manualrefresh") > -1) {
  99.           prefType = Components.interfaces.nsIPrefBranch.PREF_BOOL;
  100.         } else if (speeddialImport[i][0].indexOf("-js") > -1) {
  101.           prefType = Components.interfaces.nsIPrefBranch.PREF_BOOL;
  102.         } else {
  103.           // Char by default
  104.           prefType = Components.interfaces.nsIPrefBranch.PREF_STRING;
  105.         }
  106.         var number = (speeddialImport[i][0].split("-", 2))[1];
  107.         if (!processedThumbnails[number]) {
  108.           // Refresh thumbnail
  109.           SpeedDialUtils.deassignThumbnail(number);
  110.           processedThumbnails[number] = true;
  111.         }
  112.       } else if (speeddialImport[i][0].indexOf("group-") == 0) {
  113.         if (speeddialImport[i][0].indexOf("-title") > -1) {
  114.           addCharAsComplex = true;
  115.           prefType = Components.interfaces.nsIPrefBranch.PREF_STRING;
  116.         } else if (speeddialImport[i][0].indexOf("-style") > -1) {
  117.           prefIsEncoded = true;
  118.           prefType = Components.interfaces.nsIPrefBranch.PREF_STRING;
  119.         } else if (speeddialImport[i][0].indexOf("-rows") > -1) {
  120.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  121.         } else if (speeddialImport[i][0].indexOf("-columns") > -1) {
  122.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  123.         } else if (speeddialImport[i][0].indexOf("-minimumWidth") > -1) {
  124.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  125.         } else if (speeddialImport[i][0].indexOf("-minimumHeight") > -1) {
  126.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  127.         } else if (speeddialImport[i][0].indexOf("-maximumWidth") > -1) {
  128.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  129.         } else if (speeddialImport[i][0].indexOf("-maximumHeight") > -1) {
  130.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  131.         } else if (speeddialImport[i][0].indexOf("-widthModifier") > -1) {
  132.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  133.         } else if (speeddialImport[i][0].indexOf("-heightModifier") > -1) {
  134.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  135.         } else if (speeddialImport[i][0].indexOf("-widthModifierType") > -1) {
  136.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  137.         } else if (speeddialImport[i][0].indexOf("-heightModifierType") > -1) {
  138.           prefType = Components.interfaces.nsIPrefBranch.PREF_INT;
  139.         } else {
  140.           // Char by default
  141.           prefType = Components.interfaces.nsIPrefBranch.PREF_STRING;
  142.         }
  143.       } else {
  144.         try {
  145.           prefType = speeddial_gPrefBranch.getPrefType(speeddialImport[i][0]);
  146.         } catch (e) {
  147.           prefType = Components.interfaces.nsIPrefBranch.PREF_STRING;
  148.         }
  149.       }
  150.       switch (prefType) {
  151.         case Components.interfaces.nsIPrefBranch.PREF_BOOL:
  152.           speeddial_gPrefBranch.setBoolPref(speeddialImport[i][0],/true/i.test(speeddialImport[i][1]));
  153.           break;
  154.  
  155.         case Components.interfaces.nsIPrefBranch.PREF_INT:
  156.           speeddial_gPrefBranch.setIntPref(speeddialImport[i][0], speeddialImport[i][1]);
  157.           break;
  158.  
  159.         case Components.interfaces.nsIPrefBranch.PREF_STRING:
  160.           var pref = speeddialImport[i][1];
  161. //          if (pref.indexOf('"') == 0) // in prev version we use " " for string
  162. //            pref = pref.substring(1,pref.length - 1);
  163.           
  164.           if (addCharAsComplex) {
  165.             var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  166.             str.data = decodeURI(pref);
  167.             speeddial_gPrefBranch.setComplexValue(speeddialImport[i][0], Components.interfaces.nsISupportsString, str);
  168.           } else if (prefIsEncoded) {
  169.             speeddial_gPrefBranch.setCharPref(speeddialImport[i][0], decodeURI(pref));
  170.           } else {
  171.             speeddial_gPrefBranch.setCharPref(speeddialImport[i][0], pref);
  172.           }
  173.           break;
  174.       }
  175.     } catch(e) { alert(e); }
  176.   }
  177.   
  178.   // Refresh updated thumbnails
  179.   for (i=1; i<processedThumbnails.length; i++) {
  180.     if (processedThumbnails[i]) {
  181.       if (speeddial_gPrefBranch.prefHasUserValue("thumbnail-" + i + "-url")) {
  182.         speeddial_gPrefBranch.setBoolPref("thumbnail-" + i + "-manualrefresh", true);
  183.       }
  184.     }
  185.   }
  186.  
  187.   window.alert(strings.getString('prefs.importsuccess'));
  188.   return true;
  189. /*
  190.   alert(strings.getString('prefs.importfailed'));
  191.   return false;
  192. */
  193. }
  194.  
  195. function getMIMEService()
  196. {
  197.   const mimeSvcContractID = "@mozilla.org/mime;1";
  198.   const mimeSvcIID = Components.interfaces.nsIMIMEService;
  199.   const mimeSvc = Components.classes[mimeSvcContractID].getService(mimeSvcIID);
  200.   return mimeSvc;
  201. }
  202.  
  203.  
  204. function speeddial_saveToFile(patterns, isHtml) {
  205.   var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
  206.   var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
  207.  
  208.   var strings = document.getElementById("prefsStrings");
  209.  
  210.   fp.init(window, strings.getString('prefs.save'), fp.modeSave);
  211.   if (isHtml) {
  212.     fp.defaultExtension = 'html';
  213.     fp.defaultString = strings.getString('exportedFile.defaultFileName') + '.' + fp.defaultExtension;
  214.     var mimeInfo = getMIMEService().getFromTypeAndExtension("text/html", fp.defaultExtension);
  215.     if (mimeInfo) {
  216.       var extEnumerator = mimeInfo.getFileExtensions();
  217.  
  218.       var extString = "";
  219.       while (extEnumerator.hasMore()) {
  220.         var extension = extEnumerator.getNext();
  221.         if (extString)
  222.           extString += "; ";    // If adding more than one extension,
  223.                                 // separate by semi-colon
  224.         extString += "*." + extension;
  225.       }
  226.  
  227.       if (extString)
  228.         fp.appendFilter(mimeInfo.description, extString);
  229.     }
  230.   } else {
  231.     fp.defaultExtension = 'speeddial';
  232.     fp.defaultString = strings.getString('prefs.defaultFileName') + '.' + fp.defaultExtension;
  233.     fp.appendFilter(strings.getString('prefs.filter'), "*.speeddial");
  234.   }
  235.   fp.appendFilters(fp.filterAll);
  236.  
  237.   if(fp.show() != fp.returnCancel) {
  238.  
  239.     if(fp.file.exists()) fp.file.remove(true);
  240.     fp.file.create(fp.file.NORMAL_FILE_TYPE, 0666);
  241.     stream.init(fp.file, 0x02, 0x200, null);
  242.  
  243.     for(var i = 0; i < patterns.length; i++) {
  244.       patterns[i] = patterns[i] + "\n";
  245.       stream.write(patterns[i], patterns[i].length);
  246.     }
  247.  
  248.     stream.close();
  249.   } else {
  250.   }
  251. }
  252.  
  253. function speeddial_loadFromFile() {
  254.   var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
  255.  
  256.   var strings = document.getElementById("prefsStrings");
  257.  
  258.   fp.init(window, strings.getString('prefs.open'), fp.modeOpen);
  259.   fp.defaultExtension = 'speeddial';
  260.   fp.appendFilter(strings.getString('prefs.filter'), "*.speeddial");
  261.   fp.appendFilters(fp.filterAll);
  262.  
  263.   if(fp.show() != fp.returnCancel) {
  264.     return fp.file;
  265.   }
  266.  
  267.   return null;
  268. }
  269.  
  270. function showFirstTimeConfig() {
  271.   if (document.documentElement.openSubDialog) {
  272.     document.documentElement.openSubDialog("chrome://speeddial/content/firstTimeConfig.xul", "resizable", null);
  273.   } else {
  274.     openDialog("chrome://speeddial/content/firstTimeConfig.xul", "",
  275.                "centerscreen,chrome,dialog,resizable,modal");
  276.   }
  277. }
  278.  
  279. function restoreBackupPopupShowing(event) {
  280.   var menu = event.target;
  281.   var strings = document.getElementById("prefsStrings");
  282.     
  283.   // Empty current
  284.   while (menu.firstChild)
  285.     menu.removeChild(menu.firstChild);
  286.  
  287.   var file = Components.classes["@mozilla.org/file/directory_service;1"]
  288.                    .getService(Components.interfaces.nsIProperties)
  289.                    .get("ProfD", Components.interfaces.nsIFile);
  290.   file.append(SpeedDialUtils.backupFolder);
  291.  
  292.   var populatedMenu = false;
  293.   // Create new
  294.   if (file.exists() && file.isDirectory()) {
  295.     var backupNameMatch = "\\d+\\.speeddial";
  296.     var enumerator = file.directoryEntries;
  297.     var fileArray = new Array();
  298.     while (enumerator.hasMoreElements()) {
  299.       var targetFile = enumerator.getNext().QueryInterface(Components.interfaces.nsIFile);
  300.       if ((targetFile.isFile()) && (targetFile.leafName.match(backupNameMatch))) {
  301.         fileArray.push(new SpeedDialUtils.FileRef(targetFile.leafName, targetFile.path));
  302.       }
  303.     }
  304.  
  305.     fileArray.sort();
  306.     
  307.     for (var c=0; c<fileArray.length; c++) {
  308.       var dateString = fileArray[c].leafName;
  309.       var year = parseInt(dateString.substring(0, 4));
  310.       var month = parseInt(dateString.substring(4, 6)) - 1;
  311.       var day = parseInt(dateString.substring(6, 8));
  312.       var date = new Date();
  313.       date.setFullYear(year, month, day);
  314.       var menuitem = document.createElement("menuitem");
  315.       menuitem.setAttribute("label", date.toLocaleDateString());
  316.       menuitem.setAttribute("targetBackup", fileArray[c].path);
  317.       menu.appendChild(menuitem);
  318.       populatedMenu = true;
  319.     }
  320.   }
  321.   
  322.   if (!populatedMenu) {
  323.     var menuitem = document.createElement("menuitem");
  324.     menuitem.setAttribute("label", strings.getString("nobackups.label"));
  325.     menuitem.setAttribute("disabled", "true");
  326.     menu.appendChild(menuitem);
  327.   }
  328.   
  329.   var menuSeparator = document.createElement("menuseparator");
  330.   menu.appendChild(menuSeparator);
  331.   var optionsMenuItem = document.createElement("menuitem");
  332.   optionsMenuItem.setAttribute("label", strings.getString("showbackupfolder.label"));
  333.   menu.appendChild(optionsMenuItem);
  334. }
  335.  
  336. function restoreBackup(event) {
  337.   var targetBackup = event.target.getAttribute("targetBackup");
  338.   
  339.   if (!targetBackup) {
  340.     // Must be open backup folder
  341.     var file = Components.classes["@mozilla.org/file/directory_service;1"]
  342.                      .getService(Components.interfaces.nsIProperties)
  343.                      .get("ProfD", Components.interfaces.nsILocalFile);
  344.     file.append(SpeedDialUtils.backupFolder);
  345.     file.launch();
  346.     return;
  347.   }
  348.   
  349.   var obj = Components.classes["@mozilla.org/file/local;1"].
  350.         createInstance(Components.interfaces.nsILocalFile);
  351.   obj.initWithPath(targetBackup);
  352.   importFile(obj);
  353. }
  354.  
  355. function exportHtml() {
  356.   var strings = document.getElementById("prefsStrings");
  357.   var bundle = document.getElementById("bundle_speeddial");
  358.   var enableGroups = speeddial_gPrefBranch.getBoolPref("enableGroups");
  359.   var numGroups = 1;
  360.   if (enableGroups) {
  361.     numGroups = speeddial_gPrefBranch.getIntPref("numGroups");
  362.   }
  363.   
  364.   var outputHtml = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
  365.   + "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
  366.   + "<head>\n"
  367.   + "<title>" + strings.getString('exportedFile.title') +"</title>"
  368.   + "<style>\n"
  369.   + "  ol {\n"
  370.   + "    list-style-type: none;\n"
  371.   + "  }\n\n"
  372.   + "  ol li:before {\n"
  373.   + "    content: counter(item) \". \";\n"
  374.   + "    counter-increment: item;\n"
  375.   + "  }\n"
  376.   + "</style>\n"
  377.   + "<body>\n";
  378.   var currentDial = 1;
  379.   for (var c=1;c<=numGroups;c++) {
  380.     if (enableGroups) {
  381.       outputHtml += "<h3>";
  382.       if (speeddial_gPrefBranch.prefHasUserValue("group-" + c + "-title")) {
  383.         outputHtml += speeddial_gPrefBranch.getComplexValue("group-" + c + "-title", Components.interfaces.nsISupportsString).data
  384.       } else {
  385.         outputHtml += bundle.getFormattedString("untitledGroup.label", [c]);
  386.       }
  387.       outputHtml += "</h3>\n";
  388.     }
  389.     outputHtml += "<ol style=\"counter-reset: item " + (currentDial-1) + ";\">\n";
  390.     
  391.     var screenRows;
  392.     var screenColumns;
  393.     
  394.     if (speeddial_gPrefBranch.prefHasUserValue("group-" + c + "-rows")) {
  395.       screenRows = speeddial_gPrefBranch.getIntPref("group-" + c + "-rows");
  396.     } else {
  397.       screenRows = speeddial_gPrefBranch.getIntPref("rows");
  398.     }
  399.     if (speeddial_gPrefBranch.prefHasUserValue("group-" + c + "-columns")) {
  400.       screenColumns = speeddial_gPrefBranch.getIntPref("group-" + c + "-columns");
  401.     } else {
  402.       screenColumns = speeddial_gPrefBranch.getIntPref("columns");
  403.     }
  404.     
  405.     for (var d=0; d<(screenRows*screenColumns); d++) {
  406.       outputHtml += "<li>\n";
  407.       
  408.       if (speeddial_gPrefBranch.prefHasUserValue("thumbnail-" + currentDial + "-url")) {
  409.         var thumbnailTitle = speeddial_gPrefBranch.getComplexValue("thumbnail-" + currentDial + "-label", Components.interfaces.nsISupportsString).data;
  410.         var thumbnailURL =  speeddial_gPrefBranch.getCharPref("thumbnail-" + currentDial + "-url");
  411.         outputHtml += "<a href=\"" + thumbnailURL + "\">";
  412.         
  413.         if (thumbnailTitle == "") {
  414.           outputHtml +=  bundle.getString("untitled.label");
  415.         } else {
  416.           outputHtml +=  thumbnailTitle;
  417.         }
  418.         outputHtml += "</a>\n";
  419.       } else {
  420.         outputHtml +=  bundle.getString("unassigned.label");
  421.         outputHtml += "\n";
  422.       }
  423.  
  424.       outputHtml += "</li>\n";
  425.       
  426.       currentDial++;
  427.     }
  428.     
  429.     outputHtml += "</ol>\n";
  430.   }
  431.   outputHtml += "<p>\n" +
  432.   strings.getFormattedString("exportedFile.generatedby", ["<a href=\"http://speeddial.uworks.net/\">Speed Dial</a>"])
  433.   "</p>\n</body>\n"
  434.   + "</html>";
  435.   return outputHtml;
  436. }
  437.  
  438.  
  439.